# -*- coding: utf-8 -*-
# @Time : 2021/7/30 11:01 上午
# @Author : Ada
    
import numpy as np
import matplotlib.pyplot as plt
import torch
def gelu_1(x):
    #使用numpy实现
    return 0.5*x*(1 + np.tanh(np.sqrt(2/np.pi)*(x + 0.044715*x**3)))

def gelu_dao(inputs):
    return ((np.tanh((np.sqrt(2) * (0.044715 * inputs ** 3 + inputs)) / np.sqrt(np.pi)) + ((np.sqrt(2) * inputs * (
                0.134145 * inputs ** 2 + 1) * ((1 / np.cosh(
        (np.sqrt(2) * (0.044715 * inputs ** 3 + inputs)) / np.sqrt(np.pi))) ** 2)) / np.sqrt(np.pi) + 1))) / 2

def plot_gelu():
    x1=np.arange(-8,8,0.1)
    y1=gelu_1(x1)
    #plt.plot(x1,y1)
    y2=gelu_dao(x1)
    
    plt.plot(x1,y1)
    plt.plot(x1,y2)
    plt.show()

if __name__ == '__main__':
    plot_gelu()
